﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace KATAJAVI_SIA
{
    public partial class AgregarClientes : Form
    {
        KATAJAVI call = new KATAJAVI();
        DataClassesDataContext BEDE = new DataClassesDataContext();
        int valnombre1, valnombre2, valnombre3, valrut, valfono, valdireccion1, valdireccion2, valdireccion3;
               
        public AgregarClientes()
        {
            InitializeComponent();
        }

        private void Limpiar()
        {
            tbx_ClienteDireccion1.Clear();
            tbx_ClienteDireccion2.Clear();
            tbx_ClienteDireccion3.Clear();
            tbx_ClienteFonoNumero.Clear();
            tbx_ClienteNombre1.Clear();
            tbx_ClienteNombre2.Clear();
            tbx_ClienteNombre3.Clear();
            tbx_ClienteRut.Clear();
            tbx_ClienteRutDig.Clear();
            btn_ClienteGuardarLink.Enabled = false;
            errorProvider1.Clear();
        }

        private void btn_ClienteLimpiar_Click(object sender, EventArgs e)
        {
            Limpiar();
        }

        private void AgregarCliente_Load(object sender, EventArgs e)
        {
            //  SE INICIA EL FORMULARIO VACIO
            //==========================================
                tbx_ClienteDireccion1.Clear();
                tbx_ClienteDireccion2.Clear();
                tbx_ClienteDireccion3.Clear();
                tbx_ClienteFonoNumero.Clear();
                tbx_ClienteNombre1.Clear();
                tbx_ClienteNombre2.Clear();
                tbx_ClienteNombre3.Clear();
                tbx_ClienteRut.Clear();
                btn_ClienteGuardarLink.Enabled = true;
                tbx_ClienteNombre1.Focus();
            //==========================================
        }

        private void btn_ClienteGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                tbx_ClienteNombre1.Focus();
                tbx_ClienteNombre2.Focus();
                tbx_ClienteNombre3.Focus();
                tbx_ClienteRutDig.Focus();
                tbx_ClienteFonoNumero.Focus();
                tbx_ClienteDireccion1.Focus();
                tbx_ClienteDireccion2.Focus();
                tbx_ClienteDireccion3.Focus();
                tbx_ClienteNombre1.Focus();

                int sw = valnombre1 * valnombre2 * valnombre3 * valrut * valdireccion1 * valdireccion2 * valdireccion3 * valfono;

                if (sw == 1)
                {
                    string nombre;
                    string apellidop;
                    string apellidom;
                    if (tbx_ClienteNombre1.Text.Contains(" ")) { nombre = tbx_ClienteNombre1.Text.Replace(' ', '·'); } else { nombre = tbx_ClienteNombre1.Text; }
                    if (tbx_ClienteNombre2.Text.Contains(" ")) { apellidop = tbx_ClienteNombre3.Text.Replace(' ', '·'); } else { apellidop = tbx_ClienteNombre2.Text; }
                    if (tbx_ClienteNombre3.Text.Contains(" ")) { apellidom = tbx_ClienteNombre3.Text.Replace(' ', '·'); } else { apellidom = tbx_ClienteNombre3.Text; }
                    string nombreaux = nombre + " " + apellidop + " " + apellidom;
                    int valdup = call.ComprobarDueño(tbx_ClienteRut.Text, nombreaux);
                    if (valdup == 0)
                    {
                        CLIENTE temporal = new CLIENTE();
                        int fonoaux = int.Parse(tbx_ClienteFonoNumero.Text);
                        string direccionaux = tbx_ClienteDireccion1.Text + " #" + tbx_ClienteDireccion2.Text + ", " + tbx_ClienteDireccion3.Text;

                        temporal.nombre = nombreaux;
                        temporal.rut_cliente = int.Parse(tbx_ClienteRut.Text);
                        temporal.fono = fonoaux;
                        temporal.direccion = direccionaux;
                        temporal.softdelete = 1;

                        BEDE.CLIENTE.InsertOnSubmit(temporal);
                        BEDE.SubmitChanges();

                        MessageBox.Show("La informacion ingresada fue almacenada\nexitosamente en la base de datos.", "Informacion Guardada.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Limpiar();
                    }
                    else
                    {
                        if (valdup == 3)
                        {
                            if (MessageBox.Show("El rut que desea registrar ya había sido registrado en el sistema. Se procederá a recuperar los datos del cliente en cuestión.", "COINCIDENCIA DE REGISTROS.", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)
                            {
                                CLIENTE aux = BEDE.CLIENTE.Where(a => a.rut_cliente == int.Parse(tbx_ClienteRut.Text)).First();
                                aux.softdelete = 1;
                                BEDE.SubmitChanges();
                                Limpiar();
                                MessageBox.Show("El cliente ha sido restaurado exitosamente.\n(Este se encuentra disponible para ser editado, si fuese requerido).", "REGISTRO RECUPERADO.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                            else { MessageBox.Show("Revise si el rut ingresado es correcto. Corrijalo si fuese necesario y repita el intento.", "ERROR DE DATOS.", MessageBoxButtons.OK, MessageBoxIcon.Information); }
                        }
                        else
                        {
                            MessageBox.Show("Los datos ingresados ya han sido asociados a otro registro.\nPor favor, revise los campos señalados.", "ERROR DE DUPLICIDAD", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            if (valdup == 1)
                            {
                                errorProvider1.SetError(tbx_ClienteRutDig, "El rut ingresado ya pertenece a otro cliente registrado.");
                            }
                            if (valdup == 2)
                            {
                                errorProvider1.SetError(tbx_ClienteNombre1, "El nombre ingresado ya esta en los registros. Por favor\nmodifique el nombre o apellido del nuevo mecánico.");
                                errorProvider1.SetError(tbx_ClienteNombre2, "El nombre ingresado ya esta en los registros. Por favor\nmodifique el nombre o apellido del nuevo mecánico.");
                                errorProvider1.SetError(tbx_ClienteNombre3, "El nombre ingresado ya esta en los registros. Por favor\nmodifique el nombre o apellido del nuevo mecánico.");
                            }
                            if (valdup == 4)
                            {
                                errorProvider1.SetError(tbx_ClienteRutDig, "El nombre ingresado no corresponde a éste rut.\nPor favor corrija el rut ingresado, o alguno de los valores del nombre del cliente.");
                            }
                        }
                    }
                }
                if (sw == 0)
                {
                    MessageBox.Show("Los datos ingresados son erroneos,\n por favor revise los campos señalados.\n", "ERROR EN LOS DATOS INGRESADOS.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch { MessageBox.Show("Ha ocurrido un error al intentar guardar la inforación\n del cliente. Por favor, revise los datos e intentelo nuevamente.\n De Persistir el error, se recomienda reiniciar el programa.", "ERROR AL INTENTAR GUARDAR.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
        }

        private void tbx_ClienteRut_TextChanged(object sender, EventArgs e)
        {
            tbx_ClienteRut.Text = tbx_ClienteRut.Text.Trim();
            tbx_ClienteRutDig.Clear();
        }

        private void btn_ClienteGuardarLink_Click(object sender, EventArgs e)
        {
            AgregarMotos nuevo = new AgregarMotos();
            nuevo.TopLevel = false;
            nuevo.Parent = this;
            nuevo.Show();
        }

        private void tbx_ClienteFonoNumero_TextChanged(object sender, EventArgs e)
        {
            tbx_ClienteFonoNumero.Text = tbx_ClienteFonoNumero.Text.Trim();
        }

        private void tbx_ClienteDireccion2_TextChanged(object sender, EventArgs e)
        {
            tbx_ClienteDireccion2.Text = tbx_ClienteDireccion2.Text.Trim();
        }

        private void tbx_ClienteNombre1_Leave(object sender, EventArgs e)
        {
            tbx_ClienteNombre1.Text = tbx_ClienteNombre1.Text.Trim();
            valnombre1 = call.ValidarTextos(tbx_ClienteNombre1.Text);
            if (valnombre1 == 0) { errorProvider1.SetError(tbx_ClienteNombre1, "* Este campo solo puede contener caracteres entre A y Z, ademas de Espacios.\n* Este campo no puede quedar vacío."); }
            else { errorProvider1.SetError(tbx_ClienteNombre1, ""); }
        }

        private void tbx_ClienteNombre2_Leave(object sender, EventArgs e)
        {
            tbx_ClienteNombre2.Text = tbx_ClienteNombre2.Text.Trim();
            valnombre2 = call.ValidarTextos(tbx_ClienteNombre2.Text);
            if (valnombre2 == 0) { errorProvider1.SetError(tbx_ClienteNombre2, "* Este campo solo puede contener caracteres entre A y Z, ademas de Espacios.\n* Este campo no puede quedar vacío."); }
            else { errorProvider1.SetError(tbx_ClienteNombre2, ""); }
        }

        private void tbx_ClienteNombre3_Leave(object sender, EventArgs e)
        {
            tbx_ClienteNombre3.Text = tbx_ClienteNombre3.Text.Trim();
            valnombre3 = call.ValidarTextos(tbx_ClienteNombre3.Text);
            if (valnombre3 == 0) { errorProvider1.SetError(tbx_ClienteNombre3, "* Este campo solo puede contener caracteres entre A y Z, ademas de Espacios.\n* Este campo no puede quedar vacío."); }
            else { errorProvider1.SetError(tbx_ClienteNombre3, ""); }
        }

        private void tbx_ClienteRutDig_TextChanged(object sender, EventArgs e)
        {
            tbx_ClienteRutDig.Text = tbx_ClienteRutDig.Text.Trim();
        }

        private void tbx_ClienteRutDig_Leave(object sender, EventArgs e)
        {
            valrut = call.ValidarRut(tbx_ClienteRut.Text, tbx_ClienteRutDig.Text);
            if (valrut == 0) { errorProvider1.SetError(tbx_ClienteRutDig, "* El RUT no coincide con su digito verificador.\n* El número de RUT solo puede contener caracteres entre 0 y 9.\n* El Digito Verificador solo admite caracteres entre 0 y 9 ademas de la letra K.\n* Ninguno de los campos puede quedar vacíos."); }
            else { errorProvider1.SetError(tbx_ClienteRutDig, ""); }
        }

        private void tbx_ClienteFonoNumero_Leave(object sender, EventArgs e)
        {
            valfono = call.ValidarFono(tbx_ClienteFonoNumero.Text);
            if (valfono == 0) { errorProvider1.SetError(tbx_ClienteFonoNumero, "* Este campo solo puede contener números.\n* Este campo no puede contener menos de 8 digitos.\n* Para Celulares, anteponga 9, 8 o 7 segun corresponda.\n* Para teléfono fijo, anteponga 2.\n* Este campo no puede quedar vacío."); }
            else { errorProvider1.SetError(tbx_ClienteFonoNumero, ""); }
        }

        private void tbx_ClienteDireccion1_Leave(object sender, EventArgs e)
        {
            tbx_ClienteDireccion1.Text = tbx_ClienteDireccion1.Text.Trim();
            valdireccion1 = call.ValidarTextos(tbx_ClienteDireccion1.Text);
            if (valdireccion1 == 0) { errorProvider1.SetError(tbx_ClienteDireccion1, "* Este campo solo puede contener caracteres entre A y Z, ademas de Espacios.\n* Este campo no puede quedar vacío."); }
            else { errorProvider1.SetError(tbx_ClienteDireccion1, ""); }
        }

        private void tbx_ClienteDireccion2_Leave(object sender, EventArgs e)
        {
            valdireccion2 = call.ValidarNumeros(tbx_ClienteDireccion2.Text);
            if (valdireccion2 == 0) { errorProvider1.SetError(tbx_ClienteDireccion2, "* Este campo solo puede contener números.\n* Este campo no puede quedar vacío."); }
            else { errorProvider1.SetError(tbx_ClienteDireccion2, ""); }
        }

        private void tbx_ClienteDireccion3_Leave(object sender, EventArgs e)
        {
            tbx_ClienteDireccion3.Text = tbx_ClienteDireccion3.Text.Trim();
            valdireccion3 = call.ValidarTextos(tbx_ClienteDireccion3.Text);
            if (valdireccion3 == 0) { errorProvider1.SetError(tbx_ClienteDireccion3, "* Este campo solo puede contener caracteres entre A y Z, ademas de Espacios.\n* Este campo no puede quedar vacío."); }
            else { errorProvider1.SetError(tbx_ClienteDireccion3, ""); }
        }
    }
}
